#ifndef _SYS_POD_H_
#define _SYS_POD_H_

#include "FanObj.h"
#include "SysTypes.h"

#define POD_VTABLE(self)   ((PodVTable*)((FanObj*)self)->vtable)


extern Type*    Pod_classType;
extern VTable*  Pod_classVTable;


/* [sys::Pod] Attributes */
struct Pod
{
  FanObj        super;
};


/* [sys::Pod] Virtual-table */
typedef struct PodVTable
{
  FanObjVTable  super;
} PodVTable;


/* [sys::Pod] Methods and fields */
Str*            Pod_toStr(Obj self);
Pod*            Pod_of(Obj obj);
List*           Pod_list(void);
Pod*            Pod_find_1(Str* name);
Pod*            Pod_find(Str* name, Bool checked);
Pod*            Pod_load(InStream* in);
Str*            Pod_name(Pod* self);
Version*        Pod_version(Pod* self);
List*           Pod_depends(Pod* self);
Uri*            Pod_uri(Pod* self);
Map*            Pod_meta(Pod* self);
List*           Pod_types(Pod* self);
Type*           Pod_type_1(Pod* self, Str* name);
Type*           Pod_type(Pod* self, Str* name, Bool checked);
List*           Pod_files(Pod* self);
File*           Pod_file_1(Pod* self, Uri* uri);
File*           Pod_file(Pod* self, Uri* uri, Bool checked);
Str*            Pod_doc(Pod* self);
Log*            Pod_log(Pod* self);
Map*            Pod_props(Pod* self, Uri* uri, Duration* maxAge);
Str*            Pod_config_1(Pod* self, Str* name);
Str*            Pod_config(Pod* self, Str* name, Str* def);
Str*            Pod_locale_1(Pod* self, Str* name);
Str*            Pod_locale(Pod* self, Str* name, Str* def);


/* [sys::Pod] Type-system functions */
Type*           Pod_initType(void);
VTable*         Pod_initVTable(void);
void            Pod_initStatic(void);


#endif
